#字符串常见操作

x = 'abcdefghijklmnopqrstuvwxyz'

#获取字符串的长度
#使用内置类len
print(len(x))#26

#查找内容相关方法
#find/index/rfind/rindex
#可以获取指定字符的下标
#s.find(sub[,start[,end]]) -> int 返回的一定是一个int值
print(x.find('l')) #11

print(x.index('l')) #11

#find和index的区别：
print(x.find('P'))  #-1 如果字符在字符串里不存在，结果是-1

'''
print(x.index('P')) # ValueError: substring not found   字符在字符串里不存在会报错
'''
#使用find，如果字符在字符串里不存在，会返回-1
#使用index，如果字符在字符串里不存在，会直接报错

#find用法2：
print(x.find('l',4,9))#在下标4到9的范围内寻找字符'l'

'''
s.find(sub[, start[, end]]) -> int 
Return the lowest index in S where substring sub is found, 
such that sub is contained within s[ start: end]. Optional 
arguments start and end are interpreted as in slice notation.
 Return -1 on failure.
 
s.find（sub [，start [，end]]）-> int
返回S中找到子字符串sub的最低索引，
这样sub包含在s [start：end]中。可选的
参数start和end被解释为切片表示法。
失败时返回-1。
'''
#rfind和rindex都是找最大的下标，区别与find和index的区别是一样的

# startswith,endswith, isalpha,isdigit, isalnum, isspace
# is开头的是判断，结果是一个布尔类型
print('he1lo'.startswith('he')) #True   startswith  判断字符串是不是以括号里面的字符为开头
print('hello'.endswith('o'))    #True   endswith    判断字符串是不是以括号里面的字符为结尾
print('hello'.isalpha())# True  判断字符串是不是都字母     alpha字母
print('123'.isdigit())#True     判断字符串是否都是正整数   digit数字
#alnum判断字符串是否由正整数或字母组成
print('ab123hello'.isalnum())#True
print('123'.isalnum())#True
print('abhello'.isalnum())#True
print('4 - 1'.isalnum())#False
print('    '.isspace())#True是否全部由空格组成

'''
计算出现次数：count
返回 str 在start和end之间在mystr里面出现的次数
语法格式：
s.count(sub[,start[,end]]) -> int
示例：
mystr = '今天天气好晴朗，处处好风光'
print(mystr.count('好')) #3  '好'出现了三次
'''

"""
#替换内容：replace
#替换字符串中指定的内容，如果指定次数count，则替换不会超过count次
mystr ='今天天气好晴朗，处处好风光呀好风光'
newstr = mystr.replace('好','坏')
print(mystr)#今天天气好晴朗，处处好风光呀好风光  原字符串未改变！
print(newstr)#今天天气坏晴朗，处处坏风光呀坏风光得到的新字符串里，'好'被修改成了'坏'

newstr = mystr.replace('好','坏',2)#指定了替换的次数
print(newstr)#今天天气坏晴朗，处处坏风光呀好风光只有两处的‘好被替换成了‘坏

"""

#切割字符串split,rsplit,splitlines,partition,rpartition
#字符串类型的数据
x = 'zhangsan-lisi-wnagwu-jerry-henry-merry-jack-tony'
#['zhangsan','lisi','wangwu','jerry','henry','merry','jack','tony']
#使用split方法，可以将一个字符串切割成一个列表
y = x.split('-')
print(y)    #切割以后的结果就是一个列表['zhangsan','lisi','wangwu','jerry','henry','merry','jack','tony']
#rsplit
z = x.rsplit('-')#从右往左切
print(z)#['zhangsan','lisi','wangwu','jerry','henry','merry','jack','tony']
#print(x.split('-',2))的2是分割两次的意思，2控制分割次数，不写默认全部分割
print(x.split('-',2))#['zhangsan', 'lisi', 'wnagwu-jerry-henry-merry-jack-tony']
print(x.rsplit('-',2))#['zhangsan-lisi-wnagwu-jerry-henry-merry', 'jack', 'tony']

#splitlines 按照行分隔，返回一个包含各行作为元素的列表
#partition  指定一个字符串作为分隔符，分为3部分
# 字符前面    字符   字符后面   

print('acdefXmpXqwrst'.partition('X')) #('acdef', 'X', 'mpXqwrst')
print('acdefXmpXqwrst'.rpartition('X')) #('acdefXmp', 'X', 'qwrst')

#获取文件名和后缀名
file_name = '不要打开.mp4'
print(file_name.rpartition('.')) #('不要打开', '.', 'mp4')

#修改大小写capitalize,title,upper,lower

#空格处理ljust,rjust,center,lstrip,rstrip,strip

#字符串拼接:join